// CodeGear C++Builder
// Copyright (c) 1995, 2015 by Embarcadero Technologies, Inc.
// All rights reserved

// (DO NOT EDIT: machine generated header) 'libavdevice.pas' rev: 30.00 (Windows)

#ifndef LibavdeviceHPP
#define LibavdeviceHPP

#pragma delphiheader begin
#pragma option push
#pragma option -w-      // All warnings off
#pragma option -Vx      // Zero-length empty class member 
#pragma pack(push,8)
#include <System.hpp>
#include <SysInit.hpp>
#include <ffmpeg_types.hpp>
#include <libavutil.hpp>
#include <libavcodec.hpp>
#include <libavformat.hpp>

//-- user supplied -----------------------------------------------------------

namespace Libavdevice
{
//-- forward type declarations -----------------------------------------------
struct AVDeviceRect;
struct AVDeviceCapabilitiesQuery;
struct AVDeviceInfo;
struct AVDeviceInfoList;
//-- type declarations -------------------------------------------------------
typedef AVDeviceRect *pAVDeviceRect;

struct DECLSPEC_DRECORD AVDeviceRect
{
public:
	int x;
	int y;
	int width;
	int height;
};


typedef System::StaticArray<char, 4> AVAppToDevMessageType;

typedef System::StaticArray<char, 4> AVDevToAppMessageType;

typedef AVDeviceCapabilitiesQuery *pAVDeviceCapabilitiesQuery;

struct DECLSPEC_DRECORD AVDeviceCapabilitiesQuery
{
public:
	Libavutil::avclass *av_class;
	Libavformat::AVFormatContext *device_context;
	Libavcodec::AVCodecID codec;
	Libavutil::AVSampleFormat sample_format;
	Libavutil::AVPixelFormat pixel_format;
	int sample_rate;
	int channels;
	__int64 channel_layout;
	int window_width;
	int window_height;
	int frame_width;
	int frame_height;
	Libavutil::AVRational fps;
};


typedef AVDeviceInfo *pAVDeviceInfo;

typedef pAVDeviceInfo *ppAVDeviceInfo;

struct DECLSPEC_DRECORD AVDeviceInfo
{
public:
	char *device_name;
	char *device_description;
};


typedef AVDeviceInfoList *pAVDeviceInfoList;

struct DECLSPEC_DRECORD AVDeviceInfoList
{
public:
	pAVDeviceInfo *devices;
	int nb_devices;
	int default_device;
};


//-- var, const, procedure ---------------------------------------------------
static const System::Int8 LIBAVUTIL_VERSION_MAJOR = System::Int8(0x38);
#define LIBAVUTIL_VERSION_MAJOR_STR L"56"
static const System::Int8 LIBAVUTIL_VERSION_MINOR = System::Int8(0x1f);
static const System::Int8 LIBAVUTIL_VERSION_MICRO = System::Int8(0x64);
#define FFMPEG_VERSION L"4.2.2"
static const int LIBAVUTIL_VERSION_INT = int(0x381f64);
static const System::Int8 LIBSWSCALE_VERSION_MAJOR = System::Int8(0x5);
static const System::WideChar LIBSWSCALE_VERSION_MAJOR_STR = (System::WideChar)(0x35);
static const System::Int8 LIBSWSCALE_VERSION_MINOR = System::Int8(0x5);
static const System::Int8 LIBSWSCALE_VERSION_MICRO = System::Int8(0x64);
static const System::Int8 LIBAVCODEC_VERSION_MAJOR = System::Int8(0x3a);
#define LIBAVCODEC_VERSION_MAJOR_STR L"58"
static const System::Int8 LIBAVCODEC_VERSION_MINOR = System::Int8(0x36);
static const System::Int8 LIBAVCODEC_VERSION_MICRO = System::Int8(0x64);
static const System::Int8 LIBAVDEVICE_VERSION_MAJOR = System::Int8(0x3a);
#define LIBAVDEVICE_VERSION_MAJOR_STR L"58"
static const System::Int8 LIBAVDEVICE_VERSION_MINOR = System::Int8(0x8);
static const System::Int8 LIBAVDEVICE_VERSION_MICRO = System::Int8(0x64);
static const System::Int8 LIBAVFORMAT_VERSION_MAJOR = System::Int8(0x3a);
#define LIBAVFORMAT_VERSION_MAJOR_STR L"58"
static const System::Int8 LIBAVFORMAT_VERSION_MINOR = System::Int8(0x1d);
static const System::Int8 LIBAVFORMAT_VERSION_MICRO = System::Int8(0x64);
static const System::Int8 FF_API_R_FRAME_RATE = System::Int8(0x1);
static const System::Int8 LIBPOSTPROC_VERSION_MAJOR = System::Int8(0x37);
#define LIBPOSTPROC_VERSION_MAJOR_STR L"55"
static const System::Int8 LIBPOSTPROC_VERSION_MINOR = System::Int8(0x5);
static const System::Int8 LIBPOSTPROC_VERSION_MICRO = System::Int8(0x64);
static const System::Int8 LIBSWRESAMPLE_VERSION_MAJOR = System::Int8(0x3);
static const System::WideChar LIBSWRESAMPLE_VERSION_MAJOR_STR = (System::WideChar)(0x33);
static const System::Int8 LIBSWRESAMPLE_VERSION_MINOR = System::Int8(0x5);
static const System::Int8 LIBSWRESAMPLE_VERSION_MICRO = System::Int8(0x64);
static const System::Int8 LIBAVFILTER_VERSION_MAJOR = System::Int8(0x7);
static const System::WideChar LIBAVFILTER_VERSION_MAJOR_STR = (System::WideChar)(0x37);
static const System::Int8 LIBAVFILTER_VERSION_MINOR = System::Int8(0x39);
static const System::Int8 LIBAVFILTER_VERSION_MICRO = System::Int8(0x64);
#define swscale_dll L"swscale-5.dll"
#define avutil_dll L"avutil-56.dll"
#define avcodec_dll L"avcodec-58.dll"
#define avdevice_dll L"avdevice-58.dll"
#define avformat_dll L"avformat-58.dll"
#define postproc_dll L"postproc-55.dll"
#define swresample_dll L"swresample-3.dll"
#define avfilter_dll L"avfilter-7.dll"
extern "C" unsigned __cdecl avdevice_version(void);
extern "C" char * __cdecl avdevice_configuration(void);
extern "C" char * __cdecl avdevice_license(void);
extern "C" void __cdecl avdevice_register_all(void);
extern "C" Libavformat::pAVInputFormat __cdecl av_input_audio_device_next(Libavformat::pAVInputFormat d);
extern "C" Libavformat::pAVInputFormat __cdecl av_input_video_device_next(Libavformat::pAVInputFormat d);
extern "C" Libavformat::pAVOutputFormat __cdecl av_output_audio_device_next(Libavformat::pAVOutputFormat d);
extern "C" Libavformat::pAVOutputFormat __cdecl av_output_video_device_next(Libavformat::pAVOutputFormat d);
extern DELPHI_PACKAGE AVAppToDevMessageType AV_APP_TO_DEV_NONE;
extern DELPHI_PACKAGE AVAppToDevMessageType AV_APP_TO_DEV_WINDOW_SIZE;
extern DELPHI_PACKAGE AVAppToDevMessageType AV_APP_TO_DEV_WINDOW_REPAINT;
extern DELPHI_PACKAGE AVAppToDevMessageType AV_APP_TO_DEV_PAUSE;
extern DELPHI_PACKAGE AVAppToDevMessageType AV_APP_TO_DEV_PLAY;
extern DELPHI_PACKAGE AVAppToDevMessageType AV_APP_TO_DEV_TOGGLE_PAUSE;
extern DELPHI_PACKAGE AVAppToDevMessageType AV_APP_TO_DEV_SET_VOLUME;
extern DELPHI_PACKAGE AVAppToDevMessageType AV_APP_TO_DEV_MUTE;
extern DELPHI_PACKAGE AVAppToDevMessageType AV_APP_TO_DEV_UNMUTE;
extern DELPHI_PACKAGE AVAppToDevMessageType AV_APP_TO_DEV_TOGGLE_MUTE;
extern DELPHI_PACKAGE AVAppToDevMessageType AV_APP_TO_DEV_GET_VOLUME;
extern DELPHI_PACKAGE AVAppToDevMessageType AV_APP_TO_DEV_GET_MUTE;
extern DELPHI_PACKAGE AVDevToAppMessageType AV_DEV_TO_APP_NONE;
extern DELPHI_PACKAGE AVDevToAppMessageType AV_DEV_TO_APP_CREATE_WINDOW_BUFFER;
extern DELPHI_PACKAGE AVDevToAppMessageType AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER;
extern DELPHI_PACKAGE AVDevToAppMessageType AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER;
extern DELPHI_PACKAGE AVDevToAppMessageType AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER;
extern DELPHI_PACKAGE AVDevToAppMessageType AV_DEV_TO_APP_BUFFER_OVERFLOW;
extern DELPHI_PACKAGE AVDevToAppMessageType AV_DEV_TO_APP_BUFFER_UNDERFLOW;
extern DELPHI_PACKAGE AVDevToAppMessageType AV_DEV_TO_APP_BUFFER_READABLE;
extern DELPHI_PACKAGE AVDevToAppMessageType AV_DEV_TO_APP_BUFFER_WRITABLE;
extern DELPHI_PACKAGE AVDevToAppMessageType AV_DEV_TO_APP_MUTE_STATE_CHANGED;
extern DELPHI_PACKAGE AVDevToAppMessageType AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED;
extern "C" int __cdecl avdevice_app_to_dev_control_message(Libavformat::pAVFormatContext s, AVAppToDevMessageType _type, void * data, NativeUInt data_size);
extern "C" int __cdecl avdevice_dev_to_app_control_message(Libavformat::pAVFormatContext s, AVDevToAppMessageType _type, void * data, NativeUInt data_size);
extern "C" int __cdecl avdevice_capabilities_create(pAVDeviceCapabilitiesQuery &caps, Libavformat::pAVFormatContext s, Libavutil::pAVDictionary &device_options);
extern "C" void __cdecl avdevice_capabilities_free(pAVDeviceCapabilitiesQuery &caps, Libavformat::pAVFormatContext s);
extern "C" int __cdecl avdevice_list_devices(Libavformat::pAVFormatContext s, pAVDeviceInfoList &device_list);
extern "C" void __cdecl avdevice_free_list_devices(pAVDeviceInfoList &device_list);
extern "C" int __cdecl avdevice_list_input_sources(Libavformat::pAVInputFormat device, const char * device_name, Libavutil::pAVDictionary device_options, pAVDeviceInfoList &device_list);
extern "C" int __cdecl avdevice_list_output_sinks(Libavformat::pAVOutputFormat device, const char * device_name, Libavutil::pAVDictionary device_options, pAVDeviceInfoList &device_list);
}	/* namespace Libavdevice */
#if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) && !defined(NO_USING_NAMESPACE_LIBAVDEVICE)
using namespace Libavdevice;
#endif
#pragma pack(pop)
#pragma option pop

#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif	// LibavdeviceHPP
